using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AddRoom : MonoBehaviour
{
    [Header("Doors")]
    public GameObject[] doors;
    public GameObject doorEffect;

    [Header("Enemies")]
    public GameObject[] enemyTypes;
    public Transform[] enemySpawners;

    [Header("Powerups")]
    public GameObject shield;
    public GameObject healthPoison;

    [HideInInspector] public List<GameObject> enemies; 
    [HideInInspector] public bool doorsDestroyed;
    private bool spawned;

    // Получение информации об уровне сложности
    private void Start() {
        if (PlayerPrefs.HasKey("difficulty") == false) PlayerPrefs.SetInt("difficulty", 2);
    }

    //Появление врагов, когда игрок заходит в комнату
    private void OnTriggerEnter2D(Collider2D other) {
        if (other.CompareTag("Player") && !spawned) {
            spawned = true;
            foreach (Transform spawner in enemySpawners) { // Обработка каждого объекта спавнера
                if (enemies.Count < PlayerPrefs.GetInt("difficulty")) { 
                    int rand = Random.Range(0, 11);
                    if (rand < 9) { // Появление врагов
                        GameObject enemyType = enemyTypes[Random.Range(0, enemyTypes.Length)];
                        GameObject enemy = Instantiate(enemyType, spawner.position, Quaternion.identity) as GameObject;
                        enemy.transform.parent = transform;
                        enemies.Add(enemy);
                    } else if (rand == 9) { // Появление атпечки
                        Instantiate(healthPoison, spawner.position, Quaternion.identity);
                    } else if (rand == 10) { // Появление щита
                        Instantiate(shield, spawner.position, Quaternion.identity);
                    }
                }
            }
            StartCoroutine(CheckEnemies()); // Проверка наличия врагов
        }
    }

    // Уничтожение дверей комнаты после уничтожения всех врагов
    IEnumerator CheckEnemies() {
        yield return new WaitForSeconds(1f);
        yield return new WaitUntil(() => enemies.Count == 0);
        DestroyDoors();
    }

    // Удаление дверей в комнате
    public void DestroyDoors() {
        foreach (GameObject door in doors) {
            if (door != null && door.transform.childCount != 0) {
                Instantiate(doorEffect, door.transform.position, Quaternion.identity);
                Destroy(door);
            }
        }
        doorsDestroyed = true;
    }

    // Удаление дверей ???
    private void OnTriggerStay2D(Collider2D other) {
        if (doorsDestroyed && other.CompareTag("door")) {
            Destroy(other.gameObject);
        }
    }
}
